forgefed implementation
================================================================================

# Key Requirements

1. Implement the forgefed specification using [``ActivityPub``][ActivityPub]
for a common web server deployment, eg a LAMP server, cgi, fastcgi, or nodejs.
2. If using a persistent process, such as the node daemon, implement a
cronjob that starts/stops the process on a cycle.
3. Must use one of the following frameworks: yesod, django, laravel, or
react/react-native w/ redux on top of nodejs.
4. Users on one instance can interact with users of another instance
for issue tracking, pull/merge requests, knowledge of public forks,
and comments related to each.
5. Support at least git, though the forge doesn't necessarily need to
pass the repository, just reference to the repository, eg the location and when
necessary the commit hashes.
6. Import and export of a project from one instance to another.
7. Must have either the MIT, Apache 2, AGPLv3 or GPLv3, or compatible license.

# Why

1. Sometimes servers crash, have network outages, or get bought out.
2. Not all code repos can exist in a public facing
2. Need help managing projects from multiple repositories or issue trackers.

# Stories

1. Users create a high level task in the WBS and link to other issue trackers
that contain lower level details.
2. Users can examine or determine critical paths.

# Nice-to-haves

* All primary features work without client side JavaScript.
* Include a CLI interface at the server or for clients.
* Implement features from [``Project Management Tool``][Project Management Tool].
* Support other version control systems such as hg, darcs, fossil, svn.
* Pass an accessibility audit, eg UI has markup and style that allows
screenreaders.
* Add one-way federation for tracking existing projects already in github,
bitbucket, gogs, gitlab.
* Create a module for existing gogs, gitlab, redmine, or trac to join the
federation.
* Add comment support from other ActivityPub apps.
* Add comment support from fediverse apps in general, for example OStatus.
* Use OpenID for login (already off the shelf if using yesod).
* Since federated, implement a way to use with org-mode and magit in emacs.

# Suggestions/Ideas

* Review [``WikiPedia ActivityPub``][ActivityPub articles] and other
implementations such as [``Mastodon``][Mastodon].
* Perhaps instead of using a persistent process, add a manual or lazy feature to
let the user get and then review changes to import.

---
# FAQ

_TBD_  

---
# References

[forgefed github]: https://github.com/forgefed/forgefed
[forgefed notabug]: https://notabug.org/peers/forgefed
[Project Management Tool]: https://notabug.org/peers/peers-bounty-hunts/src/master/projects/project-management-tool.md
[ActivityPub]: https://www.w3.org/TR/activitypub/
[WikiPedia ActivityPub]: https://en.wikipedia.org/wiki/ActivityPub
[Mastodon]: https://github.com/tootsuite/mastodon
